package com.wuji1626.spark.core.wc

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object Sample03_WordCount {
  def main(args: Array[String]): Unit = {

    // Application Spark Framework
    // 建立与 Spark 框架的链接
    val sparkConf = new SparkConf().setMaster("local").setAppName("WordCount")
    val sc = new SparkContext(sparkConf)
    // 执行业务操作
    // 1.读取文件，读取一行行的数据
    // hello world
    val lines: RDD[String] = sc.textFile(path = "datas")

    // 2.将一行数据进行拆分，形成一个个的单词（分词），打平
    // "hello world" => hello, world, hello, world
    val words: RDD[String] = lines.flatMap(_.split(" "))

    // 3.将数据根据单词直接变成元组，（hello，1）（world，1）
    //
    val word2One = words.map(
      word => (word, 1)
    )

    // Spark 可以将分组、聚合通过一个函数实现。
    // reduceByKey() ：相同的 key 的数据，可以对 value 进行 reduce 聚合
    val wordCount: RDD[(String, Int)] = word2One.reduceByKey(_ + _)

    // 5.将转换结果进行打印
    val array: Array[(String, Int)] = wordCount.collect()
    array.foreach(println)

    // 关闭 Spark
    sc.stop()

  }
}
